import axios from "axios"
import store from "../store"


//创建axios实例
const instance = axios.create({
    // baseURL: "http://192.168.113.249:8081/cms",  //后端的请求路径
    baseURL: "/api",  //后端的请求路径
    timeout: 5000    //请求的判断时间,超过该时间就认为请求错误
})

//封装请求拦截器
instance.interceptors.request.use(config => {
    // console.log("1111111");
    //什么时候执行这个函数??   在请求发出去之前执行
    //config是什么??   是一个对象,保存了关于本次请求的信息
    //这个函数用来做什么??  可以用来做一些请求前的准备(比如:添加请求头)
    // console.log("请求拦截器中的代码", config);

    //判断本地有没有token,如果有就在请求头中带上token
    const token = localStorage.getItem("x-auth-token")
    if (token) {
        config.headers["x-auth-token"] = token
    }
    return config
}, err => {
    return Promise.reject(err)
})

//封装响应拦截器
instance.interceptors.response.use(res => {
    // console.log("3333333333");
    //这个函数什么时候执行??   后端返回数据,并且在组件内部接收之前执行
    //res  是axios封装的关于本次响应对象
    //res.data  就是后端给我们的数据
    //这个函数用来做什么??   对服务器响应回来的数据进行统一处理
    // console.log("响应拦截器中的res", res.data);

    //统一处理响应码不为0的情况
    let res_data = res.data
    if (res_data.code != 0 && res_data.code != 407 && res_data.code != 400) {
        //业务失败时候提示用户有问题
        // console.log(store._actions["showToast/asyncChanIsShowToast"]);
        store._actions["showToast/asyncChanIsShowToast"][0]({
            msg: res_data.message,
            type: "danger"
        })
        return false
    }
    return res_data   //这里的数据  return 到组件内部请求的回调函数中的res
}, err => {
    store._actions["showToast/asyncChanIsShowToast"][0]({
        msg: err,
        type: "danger"
    })
    return Promise.reject(err)
})

export default instance